// The following code is shown Entry point source code of // miniOS Kernel entry.s .global _ram_entry _ram_entry: b kernel_init b _ram_entry b miniOS_swiHandler b miniOS_irqHandler #define irq_stack0xa0380000 .global kernel_init kernel_init: msr cpsr_c, #0xc0 | 0x12// IRQ mode ldr r0, = TCB_IRQStack sub sp, r0,#4 msr cpsr_c, #0xc0 | 0x13// SVC mode ldr r0, =svc_stack sub sp, r0,#4 msr cpsr_c, #0xc0 | 0x1f// SYSTEM mode ldr r0, =sys_stack sub sp, r0,#4 bl main b _ram_entry .global miniOS_swiHandler miniOS_swiHandler: stmfd sp!, {r0-r12, r14} msr r1, spsr stmfd sp!, {r1} ldr r10,[lr, #-4] bic r10, r10, #0xff000000 mov r0, r10 bl swiHandler ldmfd sp!, {r1} msr spsr_cxsf, r1 ldmfd sp!, {r0-r12, pc}^ .global miniOS_irqhandler miniOS_irqhandler: msr cpsr_c, #0xc0 | 0x12// IRQ mode ldr sp, = TCB_PtrCurrentTask ldr sp, [sp] sub lr, lr, #4 add sp, sp, #4 stmia sp!, {r0-r12}^ stmia sp! {sp,lr}^ stmia sp! {lr} sub sp, sp, #68 mrs r1, spsr stmia sp!, {r1} ldr sp, irq_stack bl irqHandler ldr sp, = TCB_PtrNextTask ldr sp, [sp] ldmia sp!, {r1} msrsp sr_cxsf, r1 ldmia sp!, {r0-r12}^ |